home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2002 #11 / Amiga Plus CD - 2002 - No. 11.iso / Tools / Development / PowerD / examples / amitcp / httpget.d < prev    next >
Encoding:
Text File  |  2002-10-28  |  1.7 KB  |  79 lines

  1. OPT DOSONLY
  2.  
  3. MODULE 'socket','socket/netdb','sys/socket','netinet/in'
  4. MODULE 'dos/dos'
  5.  
  6. DEF SocketBase
  7.  
  8. DEF sockfd
  9. DEF myaddr:sockaddr_in
  10. DEF he:PTR TO hostent
  11. DEF buffer[2048]:BYTE,i,x
  12. DEF hostname[128]:UBYTE,path[256]:UBYTE
  13.  
  14. DEF args:PTR TO LONG,rdargs
  15.  
  16. PROC main()
  17.  
  18.     IFN (SocketBase := OpenLibrary('bsdsocket.library',0)) THEN Raise("SOCK")
  19.  
  20.     args := [0]:LONG
  21.  
  22.     IF rdargs := ReadArgs('HTTPADDRESS/A',args,NIL)
  23.         StrCopy(buffer,args[0])
  24.  
  25.  
  26.         i := 0
  27.         x := 0
  28.         WHILE ((buffer[i]<>"/") && (buffer[i]<>0))
  29.             hostname[x] := buffer[i]
  30.             i++
  31.             x++
  32.         ENDWHILE
  33.         hostname[x] := 0
  34.         i++
  35.         IF (buffer[i])
  36.             x := 0
  37.             WHILE (buffer[i])
  38.                 path[x] := buffer[i]
  39.                 x++
  40.                 i++
  41.             ENDWHILE
  42.         path[x] := 0
  43.         ENDIF
  44.  
  45.         IF ((sockfd:= socket(AF_INET, SOCK_STREAM,0)) <> -1)
  46.  
  47.             he := gethostbyname(hostname)
  48.  
  49.             myaddr.sin_family := AF_INET
  50.             myaddr.sin_port := 80
  51.             myaddr.sin_addr.s_addr := inet_addr(inet_ntoa(^he.h_addr_list[0]))
  52.  
  53.             connect(sockfd, &myaddr, SIZEOF_sockaddr)
  54.  
  55.             StringF(buffer,'GET /\s HTTP/1.1\nHost: \s\n\n',path,hostname)
  56.  
  57.             send(sockfd,buffer,StrLen(buffer),0)
  58.  
  59.             WHILE ((i := recv(sockfd,buffer,2048,0))>0)
  60.                 Write(Output(),buffer,i)
  61.             ENDWHILE
  62.  
  63.         CloseSocket(sockfd)
  64.         ENDIF
  65.     FreeArgs(rdargs)
  66.     ELSE
  67.         PrintFault(IOErr(),'httpget')
  68.     ENDIF
  69.  
  70. EXCEPTDO
  71.  
  72.     SELECT exception
  73.         CASE "SOCK"; PrintF('Turn on your TCP/IP stack!\n')
  74.     ENDSELECT
  75.  
  76.     IF SocketBase THEN CloseLibrary(SocketBase)
  77.  
  78. ENDPROC
  79.